#include<iostream>
using namespace std;
void print1(int arr[3][5],int r,int c)
{
	for(int i = 0;i < r;++i)
	{
		for(int j = 0;j < c;++j)
		{
			cout<<arr[i][j]<<" ";
		}
		cout<<endl; 
	}
}
//二维数组的数组名代表的是二维数组首元素即二维数组第一行的地址，故可用数组指针接收。
//类型(*p)[],[]内必须与数组长度相同否则会警告或报错。 
void print2(int (*p)[5],int r,int c)
{
	for(int i = 0;i < r;++i)
	{
		for(int j = 0;j < c;++j)
		{
			cout<<*(*(p+i)+j)<<" ";
            //cout<<p[i][j]<<" ";
            //与上面的写法等价。
			//p指向二维数组的首元素地址，*（p+i）指向二维数组的每一行。
			// （*p+i）+j是二维数组每一行每一个元素的地址，
			//解引用后即可找到二维数组中的每一个元素即*（*（p+i）+j）。 
		}
		cout<<endl;
	}
}
int main()
{
	int arr[3][5] = {1,2,3,4,5,2,3,4,5,6,3,4,5,6,7};
	print1(arr,3,5);
	cout<<"----------------"<<endl; 
    print2(arr,3,5);
    //一维数组与二位数组传参后指针接受类型不同，一维数组以类型*数组接收，二维数组以类型（*）【】类型接收。
    //int date[10] = {1,2,3,4,5,6,7,8,9,10};
    //print3(date);
    //函数接收为 void print3(int* p)。
	return 0;
 } 